package multiplex.dataaccess.teste;

import java.util.Calendar;

import multiplex.dataaccess.DaoException;
import multiplex.dataaccess.dao.FilmeDao;
import multiplex.dataaccess.dao.LocalizacaoDao;
import multiplex.dataaccess.dao.SalaDao;
import multiplex.dataaccess.dao.SessaoDao;
import multiplex.model.Filme;
import multiplex.model.Localizacao;
import multiplex.model.Sala;
import multiplex.model.SalaTipo;
import multiplex.model.Sessao;

public class GetAllFromFilmeDaoTeste implements IDaoTeste{
	
	public void run(){
		SaveAndGetTeste();
	}
	
	private void SaveAndGetTeste(){
		LocalizacaoDao localizacaoDao = new LocalizacaoDao();
		SalaDao salaDao = new SalaDao();
		SessaoDao sessaoDao = new SessaoDao();
		Localizacao localizacao = new Localizacao();
		localizacao.setNome("Multiplex Maranguape");
		localizacao.setLugarMarcado(true);
		localizacao.setCidade("Maranguape");
		localizacaoDao.save(localizacao);
		localizacao = localizacaoDao.getAll().get(0);
		Sala sala = new Sala();
		sala.setSalaTipo(SalaTipo.TEATHER);
		sala.setTecno3D(true);
		sala.setLocalizacao(localizacao);
		salaDao.save(sala);
		sala = salaDao.getAll().get(0);
		
		// CTRL+C + CTRL+V de Filmes Dao
		FilmeDao filmeDAO = new FilmeDao();
		Filme filme = new Filme();
		Calendar calendar = Calendar.getInstance();
		calendar.set(2010,10,01);
		filme.setAno(calendar);
		filme.setDestaque(true);
		filme.setDistribuidora("Disney");
		calendar = Calendar.getInstance();
		calendar.set(2010,10,05);
		filme.setDuracao(calendar);
		filme.setElenco("Robert de Niro");
		filme.setIndicacaoEtaria(16);
		filme.setLocalProducao("Bósnia");
		filme.setNome("A volta dos que não foram");
		filme.setNomeOriginal("The back of the one who not went");
		filme.setTipoFilme("Drama");
		filme.setSite("www.qualquercoisa.com");
		filme.setProdutores("Hessel");
		filme.setDirecao("Samir Elias Rossi");
		filmeDAO.save(filme);
		filme = filmeDAO.getAll().get(0);
		
		Sessao sessao = new Sessao();
		sessao.setFilme(filme);
		sessao.setSala(sala);
		sessao.setDataInicio(Calendar.getInstance());
		
		sessaoDao.save(sessao);
		
		sessao = new Sessao();
		sessao.setFilme(filme);
		sessao.setSala(sala);
		calendar = Calendar.getInstance();
		calendar.add(Calendar.DAY_OF_MONTH, 1);
		sessao.setDataInicio(calendar);
		sessaoDao.save(sessao);
		
		// criando outro Filme
		Filme filme2 = new Filme();
		calendar = Calendar.getInstance();
		calendar.set(2010,10,01);
		filme2.setAno(calendar);
		filme2.setDestaque(true);
		filme2.setDistribuidora("New Line Cinema");
		calendar = Calendar.getInstance();
		calendar.set(2010,10,05);
		filme2.setDuracao(calendar);
		filme2.setElenco("Robert do Nilo");
		filme2.setIndicacaoEtaria(16);
		filme2.setLocalProducao("Saquarema");
		filme2.setNome("As sete vidas do gato morto");
		filme2.setNomeOriginal("The seven lifes of the dead cat");
		filme2.setTipoFilme("Drama");
		filme2.setSite("www.qualquercoisa.com");
		filme2.setProdutores("Hessel, Cowboy");
		filme2.setDirecao("Samir Elias Rossi");
		filmeDAO.save(filme2);
		filme2 = (filmeDAO.getAll().get(0).getId()==filme.getId()) ? filmeDAO.getAll().get(1) : 
			filmeDAO.getAll().get(0);
		
		// criando nova sessão para aquele filme
		sessao = new Sessao();
		sessao.setFilme(filme2);
		sessao.setSala(sala);
		calendar = Calendar.getInstance();
		calendar.add(Calendar.DAY_OF_MONTH, 1);
		sessao.setDataInicio(calendar);
		sessaoDao.save(sessao);
		
		// testes
		if (sessaoDao.getAllFromSalaAndFilme(sala, filme).size()!=2) {
			throw new DaoException();
		} else if (sessaoDao.getAllFromSalaAndFilme(sala, filme2).size()!=1) {
			throw new DaoException();
		}
		
		if (salaDao.getAllFromLocalizacaoAndFilme(localizacao, filme).size()!=1) {
			throw new DaoException();
		} else if (salaDao.getAllFromLocalizacaoAndFilme(localizacao, filme2).size()!=1) {
			throw new DaoException();
		}
		
		if (localizacaoDao.getAllFromFilme(filme).size()!=1) {
			throw new DaoException();
		} else if (localizacaoDao.getAllFromFilme(filme2).size()!=1) {
			throw new DaoException();
		}
		
		localizacaoDao.remove(localizacao);
		
		System.out.println("GetAllFromFilmeDaoTeste testes passaram com sucesso");
		
	}
	
}
